﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Web;
using Echegoyen.Models;
using System.Web.Security;
using WebMatrix.WebData;

namespace Echegoyen
{
    public class TestInitializer : DropCreateDatabaseIfModelChanges<MyContext>
    {
        protected override void Seed(MyContext context)
        {
            WebSecurity.InitializeDatabaseConnection("MyContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);

            if (!Roles.RoleExists("Admins"))
            {
                Roles.CreateRole("Admins");
            }
            if (!Roles.RoleExists("Clientes"))
            {
                Roles.CreateRole("Clientes");
            }

            if (!WebSecurity.UserExists("admin"))
            {
                WebSecurity.CreateUserAndAccount("admin", "123");
            }
            if (!Roles.GetRolesForUser("admin").Contains("Admins"))
            {
                Roles.AddUsersToRoles(new[] { "admin" }, new[] { "Admins" });
            }

            if (!WebSecurity.UserExists("cliente"))
            {
                WebSecurity.CreateUserAndAccount("cliente", "123");
            }
            if (!Roles.GetRolesForUser("cliente").Contains("Clientes"))
            {
                Roles.AddUsersToRoles(new[] { "cliente" }, new[] { "Clientes" });
            }


            var autores = new List<Autor>
            {
                new Autor (1, "Julio", "Cortázar"),
                new Autor (2, "Jorge Luis", "Borges"),
                new Autor (3, "Gabriel", "García Márquez"),
                new Autor (4, "Adolfo", "Bioy Casares"),
                new Autor (5, "Edgar Allan", "Poe"),
                new Autor (6, "Hermann", "Hesse"),
                new Autor (7, "J.R.R.", "Tolkien"),
                new Autor (8, "Franz", "Kafka")
            };
            autores.ForEach(p => context.Autor.Add(p));
            context.SaveChanges();

            var editoriales = new List<Editorial>
            {
                new Editorial (1, "Alfaguara"),
                new Editorial (2, "Emecé"),
                new Editorial (3, "De Bolsillo")
            };
            editoriales.ForEach(p => context.Editorial.Add(p));
            context.SaveChanges();

            var tiposmaterial = new List<TipoMaterial>
            {
                new TipoMaterial (1, "Libro tapa dura"),
                new TipoMaterial (2, "Libro tapa blanda"),
                new TipoMaterial (3, "Revista")
            };
            tiposmaterial.ForEach(p => context.TipoMaterial.Add(p));
            context.SaveChanges();

            var temas = new List<Tema>
            {
                new Tema (1, "Ficción"),
                new Tema (2, "Ficción histórica"),
                new Tema (3, "Clásico")
            };
            temas.ForEach(p => context.Tema.Add(p));
            context.SaveChanges();

            var materiales = new List<Material>
            {
                new Material(context, 1, "Cuentos Completos", tiposmaterial[0], "Los cuentos completos de J. C., primer tomo.", editoriales[0], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[0] }),
                new Material(context, 2, "Rayuela", tiposmaterial[0], "La novela más famosa de Cortázar.", editoriales[1], 
                    new List<Tema> { temas[0], temas[2] }, new List<Autor> { autores[0] }),
                new Material(context, 3, "Crónicas de Bustos Domecq", tiposmaterial[2], "Cuentos escritos en coautoría por Borges y Bioy.", editoriales[2], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[1], autores[3] }),
                new Material(context, 4, "El Aleph", tiposmaterial[1], "Libro nombrado por el cuento más famoso de Borges, que trata sobre los infinitos.", editoriales[2], 
                    new List<Tema> { temas[0], temas[2] }, new List<Autor> { autores[1] }),
                new Material(context, 5, "Ficciones", tiposmaterial[1], "Dos libros de cuentos de Borges: el Jardín de Senderos que se Bifurcan, y Artificios", editoriales[1], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[1] }),
                new Material(context, 6, "Diario de la Guerra del Cerdo", tiposmaterial[1], "Novela corta cuyo tema principal es el conflicto entre generaciones.", editoriales[0], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[3] }),
                new Material(context, 7, "Morella", tiposmaterial[1], "Colección de cuentos de Poe, titulados por el más famoso de ellos.", editoriales[1], 
                    new List<Tema> { temas[0], temas[2] }, new List<Autor> { autores[4] }),
                new Material(context, 8, "El Lobo Estepario", tiposmaterial[0], "Una de las más célebres novelas del escritor suizo alemán, la cual combina el estilo autobiográfico con algunos elementos de fantasía.", editoriales[0], 
                    new List<Tema> { temas[0], temas[2] }, new List<Autor> { autores[5] }),
                new Material(context, 9, "El Silmarillion", tiposmaterial[0], "La historia antigua del mundo de El Señor de los Anillos.", editoriales[1], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[6] }),
                new Material(context, 10, "El General en su Laberinto", tiposmaterial[1], "La vida novelada de Simón Bolivar.", editoriales[2], 
                    new List<Tema> { temas[1] }, new List<Autor> { autores[2] }),
                new Material(context, 11, "La Metamorfosis", tiposmaterial[1], "El cuento más famoso de Kafka, acompañado de otros dos de estilo similar.", editoriales[2], 
                    new List<Tema> { temas[0] }, new List<Autor> { autores[7] }),
                new Material(context, 12, "El Castillo", tiposmaterial[0], "El castillo trata sobre la alienación, la burocracia, y la frustración, aparentemente interminable, de los intentos de un hombre por incorporarse al sistema.", editoriales[0], 
                    new List<Tema> { temas[0], temas[2] }, new List<Autor> { autores[7] }),                
            };
            materiales.ForEach(p => context.Material.Add(p));
            context.SaveChanges();

            var ejemplares = new List<Ejemplar>
            {
                new Ejemplar(1, materiales[0]),
                new Ejemplar(1, materiales[0]),
                new Ejemplar(2, materiales[0]),
                new Ejemplar(19, materiales[1]),
                new Ejemplar(3, materiales[1]),
                new Ejemplar(4, materiales[2]),
                new Ejemplar(5, materiales[3]),
                new Ejemplar(6, materiales[3]),
                new Ejemplar(7, materiales[4]),
                new Ejemplar(20, materiales[4]),
                new Ejemplar(8, materiales[5]),
                new Ejemplar(9, materiales[6]),
                new Ejemplar(10, materiales[7]),
                new Ejemplar(11, materiales[7]),
                new Ejemplar(12, materiales[7]),
                new Ejemplar(13, materiales[8]),
                new Ejemplar(14, materiales[9]),
                new Ejemplar(15, materiales[9]),
                new Ejemplar(16, materiales[10]),
                new Ejemplar(17, materiales[10]),
            };
            ejemplares.ForEach(p => context.Ejemplar.Add(p));
            context.SaveChanges();

            var usuarios = new List<Usuario>
            {
                new Usuario(1, "Juan", "Verwalter", "Soler 65", "4512345", "jverwalter@gmail.com", "Admin", "admin", "123", "SI"),
                new Usuario(2, "Andrea", "Romero", "Moreno 340", "4529998", "aromero@hotmail.com", "Cliente", "andre", "123", "SI"),
                new Usuario(3, "Carlos", "Manzur", "Charcas 915", "4535302", "manzur82@yahoo.com", "Cliente", "cliente", "123", "SI")
            };
            usuarios.ForEach(p => context.Usuario.Add(p));
            context.SaveChanges();
        }
    }
}